package com.wjm.JavaSEAPI.APIstring;

import java.util.Objects;

/**
 * Data:2022年07月02日
 * Author:wjm
 * Content: Object父类中equals()方法的介绍
 */

/*
 *
 * equals()方法和 == 的比较
 * String中的equals()方法
 *     equals是继承自Object父类的，并对其进行的重写
 *     作用是比较两个字符串的内容是否相同，相同返回true，不同返回false
 *
 * Object中的equals()方法
 *     该父类中的equal()方法是用 == 进行判断的，但是许多业务需要比较的是对象中的内容是否相同，而非比较的是否是同一个对象，
 * 如果不重写的话，无法达到想要的需求。
 *
 * == 在比较引用数据类型的时候，比较的是地址信息，只有是同一个对象的时候返回true。
 *
 * */
public class EqualsDemo {
    String name;
    int age;
    public EqualsDemo(String name,int age){
        this.age = age;
        this.name = name;
    }

    /**
     * 重写父类Object的equals()方法
     * @param o Object对象
     * @return 相同返回true
     */
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;//判断是不是同一个对象
        if (o == null || getClass() != o.getClass()) return false;//判断是不是null，或者是不是属于同一个类
        EqualsDemo that = (EqualsDemo) o;//到这说明两个是同一个类
        return age == that.age &&
                name.equals(that.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }

    public static void main(String[] args) {
        EqualsDemo e1 = new EqualsDemo("123",10);
        EqualsDemo e2 = new EqualsDemo("123",10);

        System.out.println(e1 == e2);//false
        //如果不重写也返回false，重写后返回true，重写前是比较是否为同一个对象，重写后是比较内容是否一样
        System.out.println(e1.equals(e2));
    }
}
